package br.com.vti.sisp_sicrim.antigo.model;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.vti.sisp_sicrim.antigo.dao.SicTabelasDAO;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;

@SuppressWarnings("serial")
public class SicTabelas implements Serializable {

	private String id = "";
	private String grupoElem = "";
	private String descricaoElem = "";
	private String chaveAlfaAcesso = "";
	private String oldchaveAlfaAcesso = ""; // ctrl quebra
	private Integer dataAtualizacao = 0;
	private Integer matriculaFunc = 0;
	private Integer codigoTabela = 0;
	private Integer oldcodigoTabela = 0; // ctrl quebra
	private Long codigoElem = 0L;
	private String observacao = "";
	private Integer dataApoio = 0;
	public String chalfa = "";
	public String pesq = "";
	public String pesq2 = "";
	public String resp = "";
	private ResultSet consulta = null;
	private SicTabelasDAO sicTabelasDAO = new SicTabelasDAO();

	public SicTabelas() {
		super();
	}

	public SicTabelas(String id, String grupoElem, String descricaoElem, String chaveAlfaAcesso, Integer dataAtualizacao, Integer matriculaFunc, Integer codigoTabela, Long codigoElem, String observacao, Integer dataApoio) {
		super();
		this.id = id;
		this.grupoElem = grupoElem;
		this.descricaoElem = descricaoElem;
		this.chaveAlfaAcesso = chaveAlfaAcesso;
		this.dataAtualizacao = dataAtualizacao;
		this.matriculaFunc = matriculaFunc;
		this.codigoTabela = codigoTabela;
		this.codigoElem = codigoElem;
		this.observacao = observacao;
		this.dataApoio = dataApoio;
	}

	public void grava() {

		try {
			this.id = sicTabelasDAO.insert(grupoElem, descricaoElem, chaveAlfaAcesso, dataAtualizacao, matriculaFunc, codigoTabela, codigoElem, observacao, dataApoio);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public void atualiza() {

		try {
			sicTabelasDAO.update(this.id, grupoElem, descricaoElem, chaveAlfaAcesso, dataAtualizacao, matriculaFunc, codigoTabela, codigoElem, observacao, dataApoio);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public void exclui() {

		try {
			sicTabelasDAO.delete(this.id);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public boolean pesquisaCodigoTabela(Integer pCodigoTabela) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.findCodigoTabela(pCodigoTabela);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaCodigoTabelaClas(Integer pCodigoTabela) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.findCodigoTabelaasc(pCodigoTabela);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaPorId() {
		try {
			fecha();
		} catch (Exception e) {
		}
		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.findid(this.id);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaTabcha(Integer pCodigoTabela, String pChaveAlfaAcesso) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.findTabcha(pCodigoTabela, pChaveAlfaAcesso);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean pesquisaTabele(Integer pCodigoTabela, Long pCodigoElem) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.findTabele(pCodigoTabela, pCodigoElem);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean leituraTabchaMaiorig(String pChaveAlfaAcesso, Integer pCodigoTabela) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.readTabchage(pChaveAlfaAcesso, pCodigoTabela);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean leituraTabdecMaiorig(Integer pCodigoTabela, String pDescricaoElem) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.readTabdecge(pCodigoTabela, pDescricaoElem);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean leituraTabeleMaiorig(Integer pCodigoTabela, Long pCodigoElem) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.readTabelege(pCodigoTabela, pCodigoElem);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaCodigoTabela(Integer pCodigoTabela) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.selectCodigoTabela(pCodigoTabela);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaCodigoTabelaChaveAlfaAcesso(Integer pCodigoTabela, String pChaveAlfaAcesso) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.selectCodigoTabelaChaveAlfaAcesso(pCodigoTabela, pChaveAlfaAcesso);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaCodigoTabelaCodigoElem(Integer pCodigoTabela, Long pCodigoElem) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.selectCodigoTabelaCodigoElem(pCodigoTabela, pCodigoElem);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaCodigoTabelaCodigoElemChaveAlfaAcesso(Integer pCodigoTabela, Long pCodigoElem, String pChaveAlfaAcesso) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.selectCodigoTabelaCodigoElemChaveAlfaAcesso(pCodigoTabela, pCodigoElem, pChaveAlfaAcesso);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaTabcha(Integer pCodigoTabela, String pChaveAlfaAcesso) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.selectTabcha(pCodigoTabela, pChaveAlfaAcesso);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaTabele(Integer pCodigoTabela, Long pCodigoElem) {

		try {
			if (consulta == null) {
				consulta = sicTabelasDAO.selectTabele(pCodigoTabela, pCodigoElem);
			} else {
				consulta = sicTabelasDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean fimDados() {
		return !(sicTabelasDAO.temProximo());
	}

	public void salvarQuebras() {

		oldchaveAlfaAcesso = chaveAlfaAcesso;
		oldcodigoTabela = codigoTabela;
	}

	public void formataAtributos(ResultSet lista) {

		if (lista == null)
			return;
		salvarQuebras();
		try {
			this.id = lista.getString("id");
			this.grupoElem = lista.getString("grupoElem");
			this.descricaoElem = lista.getObject("descricaoElem").toString();
			this.chaveAlfaAcesso = lista.getString("chaveAlfaAcesso");
			this.dataAtualizacao = lista.getInt("dataAtualizacao");
			this.matriculaFunc = lista.getInt("matriculaFunc");
			this.codigoTabela = lista.getInt("codigoTabela");
			this.codigoElem = lista.getLong("codigoElem");
			this.observacao = lista.getString("observacao");
			this.dataApoio = lista.getInt("dataApoio");
		} catch (SQLException e) {
		}
	}

	public boolean quebraDiatabchalfa() {

		return oldchaveAlfaAcesso != chaveAlfaAcesso;
	}

	public boolean quebraDintabcodtab() {

		return oldcodigoTabela != codigoTabela;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getGrupoElem() {
		return grupoElem;
	}

	public void setGrupoElem(String grupoElem) {
		this.grupoElem = grupoElem;
	}

	public String getDescricaoElem() {
		return descricaoElem;
	}

	public void setDescricaoElem(String descricaoElem) {
		this.descricaoElem = descricaoElem;
	}

	public String getChaveAlfaAcesso() {
		return chaveAlfaAcesso;
	}

	public void setChaveAlfaAcesso(String chaveAlfaAcesso) {
		this.chaveAlfaAcesso = chaveAlfaAcesso;
	}

	public Integer getDataAtualizacao() {
		return dataAtualizacao;
	}

	public void setDataAtualizacao(Integer dataAtualizacao) {
		this.dataAtualizacao = dataAtualizacao;
	}

	public Integer getMatriculaFunc() {
		return matriculaFunc;
	}

	public void setMatriculaFunc(Integer matriculaFunc) {
		this.matriculaFunc = matriculaFunc;
	}

	public Integer getCodigoTabela() {
		return codigoTabela;
	}

	public void setCodigoTabela(Integer codigoTabela) {
		this.codigoTabela = codigoTabela;
	}

	public Long getCodigoElem() {
		return codigoElem;
	}

	public void setCodigoElem(Long codigoElem) {
		this.codigoElem = codigoElem;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public Integer getDataApoio() {
		return dataApoio;
	}

	public void setDataApoio(Integer dataApoio) {
		this.dataApoio = dataApoio;
	}

	public void fecha() {
		sicTabelasDAO.fecha();
		consulta = null;
	}

	public long registrosProcessados() {
		return sicTabelasDAO.nroRegistro;
	}

	public long totalRegistros() {
		return sicTabelasDAO.qtdRegistros;
	}

}
